home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Taifun / Taifun 054 (1988-05-15)(Ossowski, Stefan)(DE)(PD).zip / Taifun 054 (1988-05-15)(Ossowski, Stefan)(DE)(PD).adf / MRBackup / MRBackup2.0 / Error.c < prev    next >
C/C++ Source or Header  |  1988-04-09  |  2KB  |  100 lines

  1. /* MRBackup Error handling routines.
  2.  * Filename:    Error.c
  3.  * Date:        11/20/87
  4.  * 
  5.  * History:        (most recent change first)
  6.  *
  7.  * 11/20/87 -MRR- V1.4 This package was created, along with ErrorRequest.c,
  8.  *                  to provide extended error handling features.
  9.  */
  10.  
  11. #include "MRBackup.h"
  12. #include "Gadget.h"
  13.  
  14. struct Requester RequesterStructure2;
  15.  
  16. /* Get an error handling option.  This is done by putting up a requester
  17.  * and waiting for the user to select one of the option gadgets.
  18.  * Called with:
  19.  *        flags:    error recovery flags
  20.  *            The flags are various ERR_ codes, OR'ed together.  For example,
  21.  *            ERR_ABORT | ERR_RETRY_FILE | ERR_IGNORE
  22.  *            would give the option of allowing the user to abort the
  23.  *            operation, retry the current file or simply ignore the error.
  24.  * Returns:
  25.  *        error recovery code (ERR_ABORT, ERR_RETRY_FILE, etc.)
  26.  */
  27. GetErrOpt(flags)
  28.     unsigned flags;
  29. {
  30.     ULONG class;
  31.     unsigned enable;
  32.     struct Gadget *gadget;
  33.     struct IntuiMessage *msg;
  34.     int status = ERR_ABORT;
  35.  
  36.     if (!flags)     flags = ERR_ABORT;
  37.  
  38.     for (gadget = RequesterStructure2.ReqGadget; gadget;
  39.          gadget = gadget->NextGadget) {
  40.         switch (gadget->GadgetID) {
  41.         case ABORT:
  42.             enable = flags & ERR_ABORT;
  43.             break;
  44.         case FILERETRY:
  45.             enable = flags & ERR_RETRY_FILE;
  46.             break;
  47.         case DISKRESTART:
  48.             enable = flags & ERR_RESTART_VOLUME;
  49.             break;
  50.         case FILESKIP:
  51.             enable = flags & ERR_IGNORE;
  52.             break;
  53.         default:            /* Some other gadgetry; default to enabled. */
  54.             enable = 1;
  55.         }
  56.         if (enable)
  57.             gadget->Flags &= ~GADGDISABLED;
  58.         else
  59.             gadget->Flags |= GADGDISABLED;
  60.     }
  61.  
  62.     RequesterStructure2.LeftEdge = 5;
  63.     RequesterStructure2.TopEdge = 15;
  64.     if (!Request(&RequesterStructure2, mainWindow)) {
  65.         TypeAndSpeak("I could not put up my error requester.\n");
  66.         TypeAndSpeak("I will have to abort this operation.\n");
  67.         status = ERR_ABORT;
  68.     }
  69.     else {
  70.         WindowToFront(mainWindow);
  71.         for (class = 0; class != GADGETDOWN; ) { 
  72.             Wait(1L << mainWindow->UserPort->mp_SigBit);
  73.             msg = (struct IntuiMessage *) GetMsg(mainWindow->UserPort);
  74.             if (msg) {
  75.                 class = msg->Class;
  76.                 gadget = (struct Gadget *) msg->IAddress;
  77.                 ReplyMsg(msg);
  78.             }
  79.         }
  80.         switch (gadget->GadgetID) {
  81.         case ABORT:
  82.             status = ERR_ABORT;
  83.             break;
  84.         case FILERETRY:
  85.             status = ERR_RETRY_FILE;
  86.             break;
  87.         case DISKRESTART:
  88.             status = ERR_RESTART_VOLUME;
  89.             break;
  90.         case FILESKIP:
  91.             status = ERR_IGNORE;
  92.             break;
  93.         default:
  94.             TypeAndSpeak("I have a bug in my error requester!\n");
  95.         }
  96.     }
  97.     WindowToBack(mainWindow);
  98.     return status;
  99. }
  100.